/* 
 * AlaService.java
 * 
 * Data de criação: 12/10/2010
 * 
 * O2 SOLUTIONS - SOLUÇÕES EM TECNOLOGIA DA INFORMAÇÃO. 
 *
 */
package br.com.o2solutions.siso.service;

import br.com.o2solutions.core.exception.BusinessException;
import br.com.o2solutions.core.service.Service;
import br.com.o2solutions.siso.integration.entidade.Agente;
import br.com.o2solutions.siso.integration.entidade.Ala;
import br.com.o2solutions.siso.integration.entidade.UnidadeOperacional;

/**
 * Classe responsável por definir as operações de serviço relacionadas ao objeto
 * de domínio Ala.
 * 
 * @author osvaldeir
 * @since 12/10/2010
 * 
 */
public interface AlaService extends Service<Ala> {

	/**
	 * Realiza a vinculação de um {@link Agente} a uma {@link Ala}. Caso o
	 * {@link Agente} esteja viculado a uma outra {@link Ala} este será removido
	 * desta e direcionado para a {@link Ala} de destino.
	 * 
	 * @param unidadeOperacional
	 *            {@link UnidadeOperacional} que possui a {@link Ala}
	 * @param ala
	 *            {@link Ala} a qual o {@link Agente} será vinculado
	 * @param agente
	 *            {@link Agente}
	 * @throws BusinessException
	 *             Caso alguma regra negocial seja quebrada
	 */
	public void vincularAgenteAla(UnidadeOperacional unidadeOperacional,
			Ala ala, Agente agente) throws BusinessException;

	/**
	 * Verifica se o {@link Agente} está vinculado a uma Ala.Caso positivo o
	 * retorno e true.
	 * 
	 * @param agente
	 *            {@link Agente} a ser verificado quanto seu vinculo a uma Ala
	 * @return boolean True caso o {@link Agente} esteja vinculado a uma Ala.
	 * @throws BusinessException
	 *             Caso o agente não esteja cadastrado ou seu identificador seja
	 *             nulo.
	 */
	public boolean isVinculadoAla(Agente agente) throws BusinessException;

	/**
	 * Cadastra um {@link Agente} vinculando-o a uma {@link Ala}.
	 * 
	 * @param unidadeOperacional
	 *            {@link UnidadeOperacional} a qual a Ala está vinculada
	 * 
	 * @param ala
	 *            {@link Ala} a qual o {@link Agente} será vinculado
	 * 
	 * @param agente
	 *            {@link Agente} a ser cadastrado
	 * 
	 * @throws BusinessException
	 *             Caso alguma regra negocial seja quebrada.
	 */
	public void cadastrarAgente(UnidadeOperacional unidadeOperacional, Ala ala,
			Agente agente) throws BusinessException;

}
